home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / alpha.arc / BSDUNIX.C < prev    next >
C/C++ Source or Header  |  1987-12-22  |  3KB  |  199 lines

  1. /*
  2.     FILE: unix.c
  3.     
  4.     Routines: This file contains the following routines:
  5.         eihalt()
  6.         kbread()
  7.         clksec()
  8.         tmpfile()
  9.         restore()
  10.         stxrdy()
  11.         disable()
  12.         memstat()
  13.         filedir()
  14.         
  15.     Written by Mikel Matthews, N9DVG
  16.     SYS5 stuff added by Jere Sandidge, K4FUM
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <signal.h>
  21. #include <sys/time.h>
  22. #include "global.h"
  23. #include "cmdparse.h"
  24. #include "iface.h"
  25. #include <sys/types.h>
  26. #include <sys/dir.h>
  27. #include <sys/wait.h>
  28. #include "smtp.h"
  29. #include "unix.h"
  30.  
  31. int asy_attach();
  32. extern struct cmds attab[];
  33.  
  34. eihalt()
  35. {
  36. }
  37. kbread()
  38. {
  39.     int    mask;
  40.     char    c = -1;
  41.     struct timeval timeout;
  42.     timeout.tv_sec = 0;
  43.     timeout.tv_usec = 35;
  44.     mask = 1<<0;
  45.     select(1, &mask, (int *)NULL, (int *)NULL, &timeout);
  46.     if ( mask &= 1<<0 )
  47.     {
  48.         read(fileno(stdin),&c, 1);
  49.     }
  50.     return(c);
  51. }
  52. clksec()
  53. {
  54.     struct timeval time;
  55.     struct timezone zone;
  56.  
  57.     gettimeofday(&time, &zone);
  58.     return(time.tv_sec);
  59. }
  60. FILE *
  61. tmpfile()
  62. {
  63.     FILE *tmp;
  64.     char *mktemp();
  65.     char *ptr = "SMTPXXXXXX";
  66.     char *name;
  67.     name = mktemp(ptr);
  68.     if ( ( tmp = fopen(name, "w") ) == NULL)
  69.     {
  70.         printf("tmpfile: counld not create temp file.\n");
  71.         return(NULL);
  72.     }
  73.     (void) unlink(name);
  74.     return ( tmp );
  75. }
  76. restore()
  77. {}
  78.  
  79. stxrdy()
  80. {return(1);}
  81.  
  82. disable()
  83. {}
  84.  
  85. memstat()
  86. {
  87.     return(0);
  88. }
  89.  
  90. /* wildcard filename lookup */
  91. filedir (name, times, ret_str)
  92. char *name;
  93. int times;
  94. char *ret_str;
  95. {
  96.     DIR     *dirp;
  97.     struct direct *dp;
  98.     char *ptr;
  99.     char *index();
  100.     extern char mailqdir[];
  101.     /*
  102.      * Make sure that the NULL is there incase we don't find anything
  103.      */
  104.     ret_str[0] = NULL;
  105.  
  106.     if ( (dirp = opendir(mailqdir)) == NULL ) {
  107.         printf("Could not open mail queue (%s)\n", mailqdir);
  108.         return;
  109.     }
  110.     else {
  111.         for ( dp = readdir(dirp); dp != NULL; dp = readdir(dirp)) {
  112.             if ( ( ptr = index(dp->d_name, '.')) == NULL) {
  113.                 continue;
  114.             }
  115.             else {
  116.                 ptr++;
  117.                 if ( strncmp(ptr, "wrk", 3) != 0) {
  118.                     continue;
  119.                 }
  120.                 else {
  121.                     strncpy(ret_str, dp->d_name, dp->d_namlen);
  122.                     ret_str[dp->d_namlen] = '\0';
  123.                     break;
  124.                 }
  125.             }
  126.         }
  127.     }
  128. }
  129.  
  130. /* checks the time then ticks and updates ISS */
  131. static int clkval = 0;
  132. void
  133. check_time()
  134. {
  135.     int32 iss();
  136.  
  137.     if(clkval != clksec()){
  138.         clkval = clksec();
  139.         tick();
  140.         (void)iss();
  141.     }
  142. }
  143.  
  144. getds()
  145. {
  146.     return (0);
  147. }
  148.  
  149. audit(){}
  150.  
  151. doshell(argc, argv)
  152. char **argv;
  153. {
  154.     register int pid, pid1, i, (*savi)();
  155.     union wait rc;
  156.     char str[128];
  157.  
  158.     for (i = 1; i < argc; i++) {
  159.         strcat(str, argv[i]);
  160.         strcat(str, " ");
  161.     }
  162.  
  163.     if ((pid = fork()) == 0) {
  164.         if (argc > 1)
  165.             (void)execl("/bin/sh", "sh", "-c", str, 0);
  166.         else
  167.             (void)execl("/bin/sh", "/bin/sh", (char *)0,(char *)0,0);
  168.     }
  169.     savi = signal(SIGINT, SIG_IGN);
  170.     while ((pid1 = wait(&rc)) != pid && pid1 != -1)
  171.         ;    
  172.     signal(SIGINT, savi);
  173.     return (rc.w_status);
  174. }
  175.  
  176.  
  177. dodir(argc, argv)
  178. char **argv;
  179. {
  180.     register int pid, pid1, i, (*savi)();
  181.     union wait rc;
  182.     char str[128];
  183.  
  184.     strcpy(str, "ls -l ");
  185.     for (i = 1; i < argc; i++) {
  186.         strcat(str, argv[i]);
  187.         strcat(str, " ");
  188.     }
  189.  
  190.     if ((pid = fork()) == 0)
  191.         system(str);
  192.  
  193.     savi = signal(SIGINT, SIG_IGN);
  194.     while ((pid1 = wait(&rc)) != pid && pid1 != -1)
  195.         ;    
  196.     signal(SIGINT, savi);
  197.     return (rc.w_status);
  198. }
  199.